﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace NMoq.Core
{
    public interface ISelector<TInterface>  where TInterface :IAction   
    {
        TInterface Select(MethodMessageInfo methodMessageInfo);
        void Setup(MethodMessageInfo methodMessgeInfo);
        void Setup(MethodMessageInfo methodMessageInfo,TInterface target);
        void Setup(MethodMessageInfo methodMessageInfo, Func<MethodMessageInfo, IEnumerable<TInterface>, TInterface> selectFunc);
        void Clear(MethodMessageInfo methodMessageInfo);

        TInterface Select();
        void Setup(TInterface target);
        void Clear();

        void CallDefaultAction(MethodMessageInfo methodMessageInfo, Action<MethodMessageInfo, TInterface> action);
        void CallAction(MethodMessageInfo methodMessageInfo, Action<MethodMessageInfo, TInterface> action); 
    }
}
